package cn.tedu.spring.life;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Bean对象的生命周期
 * 1. 实例化阶段（bean对象创建）
 *    在这个阶段中，IoC容器会创建一个Bean的实例，并为其分配空间。这个过程可以通过 **构造方法** 完成。
 * 2. 属性赋值阶段
 *    在实例化完Bean之后，容器会把Bean中的属性值注入到Bean中，这个过程可以通过 **set方法** 完成。
 * 3. 初始化阶段（bean对象初始化）
 *    在属性注入完成后，容器会对Bean进行一些初始化操作；
 * 4. 使用阶段
 *    初始化完成后，Bean就可以被容器使用了
 * 5. 销毁阶段
 *    容器在关闭时会对所有的Bean进行销毁操作，释放资源。
 */
public class TestLife {
    public static void main(String[] args) {
        // 不使用接口去实现
        /*ApplicationContext context = new AnnotationConfigApplicationContext(
                "cn.tedu.spring.life"
        );*/

        // 使用接口实现类,实现接口当中没有close方法
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
                "cn.tedu.spring.life"
        );

        Life life = context.getBean(Life.class);

        //  四、开发者使用阶段
        System.out.println("4、开发者使用阶段" + life);

        // 关闭IoC日期，手动强行关闭
        context.close();
    }
}
